home *** CD-ROM | disk | FTP | other *** search
- /* eshot.c */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <sys/iocs.h>
- #include "XSP2lib.H"
-
- #define PCG_MAX 32 /* パターンデータの個数 */
-
- static char pcg_alt[PCG_MAX + 1]; /* PCG配置管理テーブル */
- static char pcg_dat[PCG_MAX * 128]; /* PCGデータファイル読み込みバッファ */
-
- static unsigned short pal_dat[16][15]; /* パレットデータ */
-
-
- signed short eshot_x; /* 敵弾のX座標 */
- signed short eshot_y; /* 〃 Y座標 */
- unsigned char eshot_use; /* 〃が画面上に存在するか(=0 なら存在しない) */
-
-
-
- int main (int argc, char *argv[])
- {
- FILE *fp;
- int i, j;
- int game_over = 0;
-
- if (argc != 1) {
- printf (
- "敵弾テストその2 ESHOT.X\n"
- " programmed by Mitsuky <FreeSoftware>\n"
- "弾1発だけ発射可能バージョン\n"
- );
- exit (-1);
- }
- _iocs_crtmod (10); /* 256x256ドット グラフィック画面 256色 2画面 */
- _iocs_sp_init (); /* スプライトの初期化 */
- _iocs_sp_on ();
-
- /* pcg_dat にパターンデータを読み込む */
- fp = fopen ("ESHOT.SP", "rb");
- fread (pcg_dat, sizeof (char), PCG_MAX * 128, fp);
- fclose (fp);
-
- /* pal_buf に一旦パレットデータを読み込む */
- fp = fopen ("ESHOT.PAL", "rb");
- fread (pal_dat, sizeof (unsigned short), 16 * 15, fp);
- fclose (fp);
- /* パレットデータを定義 */
- /* (1パレットブロック=16色) × (15ブロックぶん) 定義する */
- {
- unsigned short *p = (unsigned short *) pal_dat;
- for (i = 1; i < 15; i++)
- for (j = 0; j < 16; j++)
- _iocs_spalet (0x80000000 | j, i, *p++);
- }
-
- xsp_on ();
- xsp_mode (3);
- /* パターンデータを定義 */
- xsp_pcgdat_set (pcg_dat, pcg_alt, sizeof (pcg_alt));
-
-
-
- /* ここからが今回の見所 */
- printf ("ジョイスティックの\n"
- " [B] ボタンを押すと弾を撃ちます\n"
- " [A] ボタンを押すと終了します\n");
-
-
- eshot_use = 0; /* 敵弾は画面上に存在していないことにする */
-
- do {
- xsp_vsync (0); /* 垂直同期待ち */
- j = _iocs_joyget (0); /* ジョイスティック0番 */
-
- /* [A] ボタンが押されたか? */
- if ((j & 0b00100000) == 0)
- game_over = !0; /* ゲームオーバーに */
-
- /* [B] ボタンが押されたか? */
- if ((j & 0b1000000) == 0) {
- /* 敵弾は画面上に存在するか? */
- if (eshot_use == 0) {
- /* 存在しないなら敵弾を座標(32,32)に発生 */
- eshot_use = 1;
- eshot_x = 32;
- eshot_y = 32;
- }
- }
- /* 敵弾移動処理 */
- /* 敵弾は画面上に存在するか? */
- if (eshot_use != 0) {
- /* 存在していれば移動 */
- eshot_x += 4; /* 4ドット右に移動 */
- eshot_y += 4; /* 4ドット下に移動 */
-
- /* 画面外にでたら敵弾を消去(未使用)に */
- if ((eshot_x > 256) || (eshot_y > 256)) {
- eshot_use = 0;
- } else {
- /* 座標(eshot_x,eshot_y), スプライト No.1, パレット3, 優先順位 $3f */
- xsp_set (eshot_x, eshot_y, 1, 0x033f);
- }
- }
- xsp_out (); /* 表示 */
- }
- while (!game_over);
-
- xsp_off ();
-
- _iocs_crtmod (16);
- return (0);
- }
-